package extractor;

import io.TextInputFormatForSequenceFile;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;

import trouger.dmt.JoinTableRunner;
import trouger.dmt.JoinType;
import utils.Utils;


public class UserExtendedExtractor implements Tool{
	private final static int[] userColumns = new int[]{7, 8, 10, 11, 12, 13, 14, 16, 17, 18, 19, 23, 24, 25, 26, 27, 28};
	public static final int[] getUserColumns() {
		return userColumns;
	}
	public static String getUserExtendedProfilePath(String date) {
		return Utils.rootDir + date + "/UserExtendedProfile/";
	}
	@Override 
	public Configuration getConf() {
		return null;
	}
	
	@Override
	public void setConf(Configuration conf) {
		
	}
	/*
	 * (non-Javadoc)
	 * UserFiltered Table
	 * Path: /group/tbsc-dev/xzwang/clickprediction/$date/UserExtendedProfile/
	 * 1.数字id
	 * 2.点击数
	 * 3.32位
	 * 4.Nick
	 * 5.FULLNAME (真实姓名) 
	 * 6.ADDRESS (地址)
	 * 7.CITY (所在城市)
	 * 8.PROV (所在省份)
	 * 9.COUNTRY (国家) 
	 * 10.RATE_SUM (作为卖家的信用分值，只有当等级发生变迁的时候才更新)
	 * 11.RATE_NUM (作为买家的信用分值，只有当等级发生变迁的时候才更新)
	 * 12.BIRTHDATE (生日)
	 * 13.SUSPENDED (用户状态：0 正常;1 未激活;2 删除;3 冻结;-9 CC) 
	 * 14.USER_SESSION_TIME (用户激活时间) 
	 * 15.USER_REGDATE (注册时间)
	 * 16.USER_LEVERL (用户等级) 
	 * 17.USER_STYLE (收费服务类型(按位取与字段，目前定义的二进制位有 1:alisoft网店版用户 2:b2c商城用户[占用先]))
	 * 18.USER_RANK (用户社区等级，论坛改造后没有在使用。现在还是有使用的,在商品举报的地方,有个小二专用, 中用user_rank来判断小二身份...小二身份=46 by yekai)
	 * 19.USER_GENDER (性别)
	 * 20.PROMOTED_TYPE
	 * 21.LOGINCOUNT (置0)
	 * 22.LASTVISIT (置0)
	 * 23.BUYER_GOODNUM (作为买家的好评数)
	 * 24.SELLER_GOODNUM (作为卖家的好评数)
	 * 25.BUYER_SUM　　(作为买家的评价分值)
	 * 26.BUYER_NUM (作为买家的评价次数)
	 * 27.SELLER_SUM (作为卖家的评价分值)
	 * 28.SELLER_NUM (作为卖家的评价次数)
	 * 29.USER_TAG (1：允许超级密码登录；2：该用户是否有处罚记录，只增不减；4：需要监控的用户；16：会员星级已经进入汇总表; 32：B2C商家; 64:店铺商家认证; 128：机票卖家（震北）; 256:卖家支持淘金卡；512：金买家；1024：白金买家；2048：钻石买家;4096 旺铺多图; 8192(2的13次):店铺营销工具（满就减、送服务）; 16384：套餐营销; 32768(2的15次)：卖家支持货到付款; 65536：卖家支持信用卡;131072：卖家订购了商家工具的增值服务; 262144（2的18次方）：用户是否为“我的淘宝”beta用户，无值：非beta，有值：是beta; 524288（2的19次方）：“我的淘宝”用户选择了“新版”还是“旧版”，无值：旧版，有值：新版（万剑）; 2097152（2的21次方）：现在是否是sp账户; 4194304(2的22次方):是否已签支付宝代扣协议; 8388608(2的23次方):保险卖家; 16777216(2的24次方):是否加入试衣间;33554432(2的25次方):判断什么时候减库存（下单还是付款，默认为下单减库存,1为付款减库;）67108864(2的26次方) ECRM占位; 134217728(2的27此方) 店铺消费券占位;268435456(2的28次方) 将卖家中心设为首页，用户买卖分离用(万剑); 536870912(2的29次方) 3C垂直市场卖家(索尼) 1073741824(2的30次方) 网游批量发布权限(凌弃) 因为UserExtraDO中该字段为int型，所以该字段暂时不再增加新的标记位) 
	 * */	 
	@Override
	public int run(String[] args) throws Exception {
		String output = getUserExtendedProfilePath(args[0]);
		String userProfile = UserExtractor.getUserProfilePath(args[0]);
		String userExtendedProfile = "/group/taobao/taobao/hive/s_bmw_users_extra/pt=" + args[0] + "000000/";
		System.out.println("start job ExtractUser...");
		System.out.println("userProfile: " + userProfile);
		System.out.println("userExtendedProfile: " + userExtendedProfile);
		System.out.println("output: " + output);
		if (Utils.exitSystem(args))
			return -1;
		JoinTableRunner r = new JoinTableRunner();		
		r.addSourceTable(userProfile, "UTF-8", "\t");
		r.addSourceTable(userExtendedProfile, TextInputFormatForSequenceFile.class, "UTF-8", "\u0001");
		r.addKeyGroup("1.1, 2.18");	
		r.setJoinType(JoinType.InnerJoin);
		r.setResultFieldsEx("1.1, 1.2, 1.3, 1.4, 1.5, " +
				"1.6, 1.7, 1.8, 1.9, 1.10, " +
				"1.11, 1.12, 1.13, 1.14, 1.15, " +
				"1.16, 1.17, 1.18, 1.19, 1.20, " +
				"2.2, 2.3, 2.5, 2.6, 2.7, " +
				"2.8, 2.9, 2.10, 2.13");
		r.setResultTable(output);
		r.run("UserExtendedFeatureExtractorJob");
		return 0;		 	
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		Utils.checkArgs(args);
		
		// TODO Auto-generated method stub
		int res = ToolRunner.run(new UserExtendedExtractor(), args);
		System.exit(res);
	}

}
